As computer systems software becomes more complex, software analysts and architects often rely on models to represent the software. Tools have been developed to operate on a model of the software to generate the software code (e.g., Java, C++). The model may be created, for example, using Unified Modeling Language (UML). The software model and the generated code exist as files or “artifacts”. Code is generated from the software model in a forward engineering operation. The code can be modified and a reverse engineering operation can be used to update the software model to account for the code modifications.
In a common scenario, a software model is developed and code is then generated from the model. Subsequently, the code is modified and then the software model is transformed according to the intervening changes in the code. This process is repeated until the final code version is achieved. However, if the software model and the code are modified in parallel (i.e., concurrently), changes made to the software model can conflict with changes made to the code. Similarly, changes made to the code can conflict with changes made to the software model. Consequently, reconciliation of the software model and the code may require user intervention. To accommodate potential conflicts, annotations are typically added for objects specified in the software model to track whether the objects have been modified in the software model or in the code. This extra tracking information results in more complex and costly modeling implementations.
What is needed is a method to synchronize concurrently modified artifacts without having to maintain annotation information for each object. The present invention satisfies this need and provides additional advantages.